package com.example.dml.generics;

import java.util.ArrayList;
import java.util.List;

/**
 * @Authors：gaoyang
 * @CreateTime：2021-10-29
 * @Description：todo
 */
public class Generic01 {

    /**
     * 在实际情况下，我们不知道要传入的参数到底是Dog还是Cat，所以对于不确定或者不关心实际要
     * 操作的类型，可以使用无限制通配符
     * 上界通配符: <? extends Animal> 用extends关键字声明，标识参数化的类型可能是所指定的类型，或者是该类型的子类
     * 下界通配符: <? super E> 用super进行声明，标识参数化的类型可能是所指定的类型，或者是此类型的父类型，直至Object
     * @param animals
     * @return
     */
    static int countLegs(List<? extends Animal> animals){
        int retVal = 0;
        for (Animal animal:animals){
            retVal+=animal.countLegs();
        }
        return retVal;
    }

    static int countLegs1(List<Animal> animals){
        int retVal = 0;
        for (Animal animal:animals){
            retVal+=animal.countLegs();
        }
        return retVal;
    }

    public static void main(String[] args) {
        List<Dog> dogs = new ArrayList<>();
        countLegs(dogs);
//        countLegs1(dogs);
    }
}
